home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / other / whdload / rawdic17.lha / Examples / Mercenary2.islave.asm < prev    next >
Assembly Source File  |  1999-03-02  |  2KB  |  88 lines

  1.  
  2.     ; Mercenary 2 - Damocles imager
  3.  
  4.     ; A track contains $1800 bytes of data.
  5.  
  6.     ; The format is singlesided, both sides contain the same data.
  7.  
  8.     ; track format description:
  9.  
  10.     ; sync ($A89A)
  11.     ; 4 unused bytes ($12345678)
  12.     ; 1 byte track number
  13.     ; $1800 bytes data
  14.     ; 1 word checksum
  15.  
  16.     ; The checksum is calculated by adding all data bytes to a word variable
  17.     ; which is rotated to the left every step.
  18.  
  19.     ; The MFM decoding is done by skipping all odd bits in the bitstream.
  20.  
  21.     ; Similar formats: All other Novagen games on Amiga
  22.  
  23.         incdir    Includes:
  24.         include    RawDIC.i
  25.  
  26.         SLAVE_HEADER
  27.         dc.b    1    ; Slave version
  28.         dc.b    0    ; Slave flags
  29.         dc.l    DSK_1    ; Pointer to the first disk structure
  30.         dc.l    Text    ; Pointer to the text displayed in the imager window
  31.  
  32.         dc.b    "$VER:"
  33. Text:        dc.b    "Damocles imager V1.0",10,"by John Selck on 02.03.1999",0
  34.         cnop    0,4
  35.  
  36. DSK_1:        dc.l    0        ; Pointer to next disk structure
  37.         dc.w    1        ; Disk structure version
  38.         dc.w    DFLG_SINGLESIDE|DFLG_ERRORSWAP    ; Disk flags
  39.         dc.l    TL_1        ; List of tracks which contain data
  40.         dc.l    0        ; UNUSED, ALWAYS SET TO 0!
  41.         dc.l    FL_DISKIMAGE    ; List of files to be saved
  42.         dc.l    0        ; Table of certain tracks with CRC values
  43.         dc.l    0        ; Alternative disk structure, if CRC failed
  44.         dc.l    0        ; Called before a disk is read
  45.         dc.l    0        ; Called after a disk has been read
  46.  
  47. TL_1:        TLENTRY    1,79,$1800,$A89A,DMFM_Novagen
  48.         TLEND
  49.  
  50. DMFM_Novagen:    ; Decoder for tracks in Novagens very own format.
  51.  
  52.         moveq    #0,d1
  53.         moveq    #20,d2
  54. .l0        bsr.b    NextByte
  55.         lsl.l    #8,d1
  56.         move.b    d0,d1
  57.         cmp.l    #$12345678,d1
  58.         dbeq    d2,.l0
  59.  
  60.         bsr.b    NextByte    ; skip track number
  61.  
  62.         moveq    #0,d2
  63.         move.w    #$17ff,d1
  64. .l1        bsr.b    NextByte    ; decode data
  65.         add.b    d0,d2
  66.         rol.w    #1,d2
  67.         move.b    d0,(a1)+
  68.         dbra    d1,.l1
  69.  
  70.         bsr.b    NextByte    ; compare checksum on disk
  71.         move.b    d0,d1        ; with calculated sum
  72.         bsr.b    NextByte
  73.         lsl.w    #8,d1
  74.         move.b    d0,d1
  75.         rol.w    #8,d1
  76.         cmp.w    d1,d2
  77.         bne.b    .error
  78.  
  79.         moveq    #IERR_OK,d0    ; no error
  80.         rts
  81. .error        moveq    #IERR_CHECKSUM,d0    ; checksum error
  82.         rts
  83.  
  84. NextByte:    move.w    (a0)+,d0
  85.         BITSKIP_B d0
  86.         rts
  87.  
  88.